package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cedarsoftware.util.io.JsonWriter;

import business.Defi;
import business.Utilisateur;
import business.utilities.Defi_Package;


public class S_ChallengeAction extends HttpServlet {
	private static final long serialVersionUID = 1L;


	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("json");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();

		String action = request.getParameter("action");
		Utilisateur utilisateur = (Utilisateur) request.getSession().getAttribute("utilisateur");
		
		// Renvoie les défis en cours.
		if(action == null || action.equals("")) {
			// Renvoie les défis en cours.
			List<Defi_Package> json = new ArrayList<Defi_Package>();
			
			List<Defi> defisFaits = utilisateur.getDefisFaits();
			if(defisFaits != null && !defisFaits.isEmpty()) {
				for(Defi d : defisFaits) {
					Defi_Package dp = new Defi_Package();
					dp.update(d, utilisateur);
					json.add(dp);
				}
			}
			
			List<Defi> defisRecus = utilisateur.getDefisRecus();
			if(defisRecus != null && !defisRecus.isEmpty()) {
				for(Defi d : defisRecus) {
					Defi_Package dp = new Defi_Package();
					dp.update(d, utilisateur);
					json.add(dp);
				}
			}
			
			if(!json.isEmpty())
				out.print(JsonWriter.objectToJson(json));
			else
				out.print("{}");
		}
		else {
			// Nouveau défi.
			if(action.equals("ajouter")) {
				int id_cible = Integer.valueOf(request.getParameter("id_cible"));
				int id_pariDemandeur = Integer.valueOf(request.getParameter("id_pari"));
				
				if(utilisateur.ajouterDefi(id_cible, id_pariDemandeur))
					out.print("{}");
				else
					response.setStatus(599);
			}
			// Accepter défi.
			else if(action.equals("accepter")) {
				int id_defi = Integer.valueOf(request.getParameter("id_defi"));
				int mise = Integer.valueOf(request.getParameter("mise"));
				int retard = Integer.valueOf(request.getParameter("retard"));
				
				if(utilisateur.accepterDefi(id_defi, mise, retard))
					out.print("{}");
				else
					response.setStatus(598);
			}
			else if(action.equals("refuser")) {
				int id_defi = Integer.valueOf(request.getParameter("id_defi"));
				
				if(utilisateur.refuserDefi(id_defi))
					out.print("{}");
				else
					response.setStatus(597);
			}
		}
		
		out.close();
	}
}